Micron Document
NexusPi Git Node


Displaying Raw • Download

lib/microReticulum/src/Reticulum.h copilot/add-rtnode-configuration-options (9529fa8a) Text, 6.44 KB

Tff7b72#Tff7b72pragma once

Tff7b72#Tff7b72include T8b949e"Transport.h"
Tff7b72#Tff7b72include T8b949e"Log.h"
Tff7b72#Tff7b72include T8b949e"Type.h"
Tff7b72#Tff7b72include T8b949e"Utilities/OS.h"

Tff7b72#Tff7b72include T8b949e<vector>
Tff7b72#Tff7b72include T8b949e<map>
Tff7b72#Tff7b72include T8b949e<string>
Tff7b72#Tff7b72include T8b949e<memory>
Tff7b72#Tff7b72include T8b949e<cassert>
Tff7b72#Tff7b72include T8b949e<stdint.h>

Te6edf3namespace Te6edf3RNS Tb4b4b4{

T8b949e// IFAC salt used for key derivation (matches Python RNS Reticulum.IFAC_SALT)
Tff7b72static Tff7b72const Tffa657uint8_t Te6edf3IFAC_SALTTb4b4b4[Tb4b4b4] Tff7b72= Tb4b4b4{
T79c0ff0xadTb4b4b4, T79c0ff0xf5Tb4b4b4, T79c0ff0x4dTb4b4b4, T79c0ff0x88Tb4b4b4, T79c0ff0x2cTb4b4b4, T79c0ff0x9aTb4b4b4, T79c0ff0x9bTb4b4b4, T79c0ff0x80Tb4b4b4,
T79c0ff0x77Tb4b4b4, T79c0ff0x1eTb4b4b4, T79c0ff0xb4Tb4b4b4, T79c0ff0x99Tb4b4b4, T79c0ff0x5dTb4b4b4, T79c0ff0x70Tb4b4b4, T79c0ff0x2dTb4b4b4, T79c0ff0x4aTb4b4b4,
T79c0ff0x3eTb4b4b4, T79c0ff0x73Tb4b4b4, T79c0ff0x33Tb4b4b4, T79c0ff0x91Tb4b4b4, T79c0ff0xb2Tb4b4b4, T79c0ff0xa0Tb4b4b4, T79c0ff0xf5Tb4b4b4, T79c0ff0x3fTb4b4b4,
T79c0ff0x41Tb4b4b4, T79c0ff0x6dTb4b4b4, T79c0ff0x9fTb4b4b4, T79c0ff0x90Tb4b4b4, T79c0ff0x7eTb4b4b4, T79c0ff0x55Tb4b4b4, T79c0ff0xcfTb4b4b4, T79c0ff0xf8
Tb4b4b4}Tb4b4b4;
Tff7b72static Tff7b72const Tffa657size_t Te6edf3IFAC_SALT_SIZE Tff7b72= Tff7b72sizeofTb4b4b4(Te6edf3IFAC_SALTTb4b4b4)Tb4b4b4;

Te6edf3class Te6edf3Reticulum Tb4b4b4{

Te6edf3publicTff7b72:

T8b949e//z router = None
T8b949e//z config = None

T8b949e// The default configuration path will be expanded to a directory
T8b949e// named ".reticulum" inside the current users home directory
T8b949e//z userdir = os.path.expanduser("~")
T8b949e//z configdir = None
T8b949e//z configpath = ""
T8b949e//p storagepath = ""
T8b949e//static std::string _storagepath;
Tff7b72static Tffa657char Te6edf3_storagepathTb4b4b4[Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3FILEPATH_MAXSIZETb4b4b4]Tb4b4b4;
T8b949e//p cachepath = ""
T8b949e//static std::string _cachepath;
Tff7b72static Tffa657char Te6edf3_cachepathTb4b4b4[Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3FILEPATH_MAXSIZETb4b4b4]Tb4b4b4;

Tff7b72static Tff7b72const Te6edf3ReticulumTff7b72& Te6edf3_instanceTb4b4b4;

Tff7b72static Tffa657bool Te6edf3__transport_enabledTb4b4b4;
Tff7b72static Tffa657bool Te6edf3__link_mtu_discoveryTb4b4b4;
Tff7b72static Tffa657bool Te6edf3__remote_management_enabledTb4b4b4;
Tff7b72static Tffa657bool Te6edf3__use_implicit_proofTb4b4b4;
Tff7b72static Tffa657bool Te6edf3__allow_probesTb4b4b4;
Tff7b72static Tffa657bool Te6edf3panic_on_interface_errorTb4b4b4;

Te6edf3publicTff7b72:
T8b949e// Return the currently running Reticulum instance
Tff7b72inline Tff7b72static Tff7b72const Te6edf3ReticulumTff7b72& Te6edf3get_instanceTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3_instanceTb4b4b4; Tb4b4b4}

Te6edf3publicTff7b72:
Te6edf3ReticulumTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3ReticulumTb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3NoneConstructor Te6edf3noneTb4b4b4) Tb4b4b4{
Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffReticulum empty object created, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3thisTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff, data: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3ReticulumTb4b4b4(Tff7b72const Te6edf3ReticulumTff7b72& Te6edf3reticulumTb4b4b4) Tff7b72: Te6edf3_objectTb4b4b4(Te6edf3reticulumTb4b4b4.Te6edf3_objectTb4b4b4) Tb4b4b4{
Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffReticulum object copy created, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3thisTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff, data: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3virtual Tff7b72~Te6edf3ReticulumTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffReticulum object destroyed, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3thisTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff, data: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72inline Te6edf3ReticulumTff7b72& Te6edf3operator Tff7b72= Tb4b4b4(Tff7b72const Te6edf3ReticulumTff7b72& Te6edf3reticulumTb4b4b4) Tb4b4b4{
Te6edf3_object Tff7b72= Te6edf3reticulumTb4b4b4.Te6edf3_objectTb4b4b4;
Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffReticulum object copy created by assignment, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3thisTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff, data: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72*Te6edf3thisTb4b4b4;
Tb4b4b4}
Tff7b72inline Te6edf3operator Tffa657boolTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Tffa657nullptrTb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657bool Te6edf3operator Tff7b72< Tb4b4b4(Tff7b72const Te6edf3ReticulumTff7b72& Te6edf3reticulumTb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4) Tff7b72< Te6edf3reticulumTb4b4b4.Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3publicTff7b72:
Tffa657void Te6edf3startTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffloopTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffjobsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffshould_persist_dataTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffpersist_dataTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffclean_cachesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffclear_cachesTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e//void __create_default_config();
T8b949e//void rpc_loop();
T8b949e//void get_interface_stats() const;
Tff7b72const Te6edf3stdTff7b72:Tff7b72:Te6edf3mapTff7b72<Te6edf3BytesTb4b4b4, Te6edf3TransportTff7b72:Tff7b72:Te6edf3DestinationEntryTff7b72>Tff7b72& Te6edf3get_path_tableTb4b4b4(Tb4b4b4) Tff7b72constTb4b4b4;
Tff7b72const Te6edf3stdTff7b72:Tff7b72:Te6edf3mapTff7b72<Te6edf3BytesTb4b4b4, Te6edf3TransportTff7b72:Tff7b72:Te6edf3RateEntryTff7b72>Tff7b72& Te6edf3get_rate_tableTb4b4b4(Tb4b4b4) Tff7b72constTb4b4b4;
Tffa657bool Td2a8ffdrop_pathTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3destinationTb4b4b4)Tb4b4b4;
Tffa657uint16_t Td2a8ffdrop_all_viaTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3transport_hashTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffdrop_announce_queuesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3stdTff7b72:Tff7b72:Te6edf3string Td2a8ffget_next_hop_if_nameTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3destinationTb4b4b4) Tff7b72constTb4b4b4;
Tffa657double Td2a8ffget_first_hop_timeoutTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3destinationTb4b4b4) Tff7b72constTb4b4b4;
Tff7b72const Te6edf3Bytes Td2a8ffget_next_hopTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3destinationTb4b4b4) Tff7b72constTb4b4b4;
Tffa657size_t Td2a8ffget_link_countTb4b4b4(Tb4b4b4) Tff7b72constTb4b4b4;
T8b949e//void get_packet_rssi(const Bytes& packet_hash) const;
T8b949e//void get_packet_snr(const Bytes& packet_hash) const;
T8b949e//void get_packet_q(const Bytes& packet_hash) const;

T8b949e/*
Returns whether proofs sent are explicit or implicit.

:returns: True if the current running configuration specifies to use implicit proofs. False if not.
*/
Tff7b72inline Tff7b72static Tffa657bool Td2a8ffshould_use_implicit_proofTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3__use_implicit_proofTb4b4b4; Tb4b4b4}

T8b949e/*
Returns whether Transport is enabled for the running
instance.

When Transport is enabled, Reticulum will
route traffic for other peers, respond to path requests
and pass announces over the network.

:returns: True if Transport is enabled, False if not.
*/
Tff7b72inline Tff7b72static Tffa657bool Td2a8fftransport_enabledTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3__transport_enabledTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72static Tffa657void Td2a8fftransport_enabledTb4b4b4(Tffa657bool Te6edf3transport_enabledTb4b4b4) Tb4b4b4{ Te6edf3__transport_enabled Tff7b72= Te6edf3transport_enabledTb4b4b4; Tb4b4b4}

T8b949e/*
Returns whether link MTU discovery is enabled for the running
instance.

When link MTU discovery is enabled, Reticulum will
automatically upgrade link MTUs to the highest supported
value, increasing transfer speed and efficiency.

:returns: True if link MTU discovery is enabled, False if not.
*/
Tff7b72inline Tff7b72static Tffa657bool Td2a8fflink_mtu_discoveryTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3__link_mtu_discoveryTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72static Tffa657void Td2a8fflink_mtu_discoveryTb4b4b4(Tffa657bool Te6edf3link_mtu_discoveryTb4b4b4) Tb4b4b4{ Te6edf3__link_mtu_discovery Tff7b72= Te6edf3link_mtu_discoveryTb4b4b4; Tb4b4b4}

T8b949e/*
Returns whether remote management is enabled for the
running instance.

When remote management is enabled, authenticated peers
can remotely query and manage this instance.

:returns: True if remote management is enabled, False if not.
*/
Tff7b72inline Tff7b72static Tffa657bool Td2a8ffremote_management_enabledTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3__remote_management_enabledTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72static Tffa657void Td2a8ffremote_management_enabledTb4b4b4(Tffa657bool Te6edf3remote_management_enabledTb4b4b4) Tb4b4b4{ Te6edf3__remote_management_enabled Tff7b72= Te6edf3remote_management_enabledTb4b4b4; Tb4b4b4}

Tff7b72inline Tff7b72static Tffa657bool Td2a8ffprobe_destination_enabledTb4b4b4(Tb4b4b4) Tb4b4b4{ Tff7b72return Te6edf3__allow_probesTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72static Tffa657void Td2a8ffprobe_destination_enabledTb4b4b4(Tffa657bool Te6edf3allow_probesTb4b4b4) Tb4b4b4{ Te6edf3__allow_probes Tff7b72= Te6edf3allow_probesTb4b4b4; Tb4b4b4}

T8b949e// getters/setters
Tff7b72inline Tffa657bool Td2a8ffis_connected_to_shared_instanceTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_is_connected_to_shared_instanceTb4b4b4; Tb4b4b4}

Te6edf3privateTff7b72:
Te6edf3class Te6edf3Object Tb4b4b4{
Te6edf3publicTff7b72:
Te6edf3ObjectTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffReticulum data object created, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3thisTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3virtual Tff7b72~Te6edf3ObjectTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffReticulum data object destroyed, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3thisTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3privateTff7b72:

Tffa657uint16_t Te6edf3_local_interface_port Tff7b72= T79c0ff37428Tb4b4b4;
Tffa657uint16_t Te6edf3_local_control_port Tff7b72= T79c0ff37429Tb4b4b4;
Tffa657bool Te6edf3_share_instance Tff7b72= Tffa657trueTb4b4b4;
T8b949e//p _rpc_listener = None

T8b949e//p _ifac_salt = Reticulum.IFAC_SALT

Tffa657bool Te6edf3_is_shared_instance Tff7b72= Tffa657falseTb4b4b4;
Tffa657bool Te6edf3_is_connected_to_shared_instance Tff7b72= Tffa657falseTb4b4b4;
Tffa657bool Te6edf3_is_standalone_instance Tff7b72= Tffa657falseTb4b4b4;
T8b949e//p _jobs_thread = None
Tffa657double Te6edf3_last_data_persist Tff7b72= Te6edf3UtilitiesTff7b72:Tff7b72:Te6edf3OSTff7b72:Tff7b72:Te6edf3timeTb4b4b4(Tb4b4b4)Tb4b4b4;
Tffa657double Te6edf3_last_cache_clean Tff7b72= T79c0ff0.0Tb4b4b4;

T8b949e// CBA
Tffa657double Te6edf3_jobs_last_run Tff7b72= Te6edf3UtilitiesTff7b72:Tff7b72:Te6edf3OSTff7b72:Tff7b72:Te6edf3timeTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3friend Te6edf3class Te6edf3ReticulumTb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3stdTff7b72:Tff7b72:Te6edf3shared_ptrTff7b72<Te6edf3ObjectTff7b72> Te6edf3_objectTb4b4b4;

Tb4b4b4}Tb4b4b4;

Tb4b4b4}

Served by rngit 1.4.2 - Generated in 0.03s